// JavaScript source code
function uuid() {
    function s4() { return Math.floor((1 + Math.random()) * 0x10000).toString(16).substring(1); }
    return s4() + s4() + "-" + s4() + "-" + s4() + "-" + s4() + "-" + s4() + s4() + s4();
}

function HexToBase64(hex) {
    var base64Digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    var base64 = "";
    var group;
    for (var i = 0; i < 30; i += 6) {
        group = parseInt(hex.substr(i, 6), 16);
        base64 += base64Digits[(group >> 18) & 0x3f];
        base64 += base64Digits[(group >> 12) & 0x3f];
        base64 += base64Digits[(group >> 6) & 0x3f];
        base64 += base64Digits[group & 0x3f];
    }
    group = parseInt(hex.substr(30, 2), 16);
    base64 += base64Digits[(group >> 2) & 0x3f];
    base64 += base64Digits[(group << 4) & 0x3f];
    base64 += "==";
    return base64;
}

function NUUID(uuid) {
    var hex = uuid.replace(/[{}-]/g, ""); // remove extra characters    
    var a = hex.substr(6, 2) + hex.substr(4, 2) + hex.substr(2, 2) + hex.substr(0, 2);
    var b = hex.substr(10, 2) + hex.substr(8, 2);
    var c = hex.substr(14, 2) + hex.substr(12, 2);
    var d = hex.substr(16, 16);
    hex = a + b + c + d;
    var base64 = HexToBase64(hex);
    return new BinData(3, base64);
}

var newCriteria = ["Governance Weight", "Social Weight", "Environment Weight"];
var CriteriaLevel2Id = db.getCollection("CriteriaLevel2").findOne({ Name: "Ratings" })._id;
 
use ClientPlatform
var i = 151;
newCriteria.forEach(function(item) {
    i++;
    if (!db.CriteriaLevel3.findOne({ "Name": item, "Category": "Weight" })) {
        db.CriteriaLevel3.insert({
            "_id": NUUID(uuid()),
            "Name": item,
            "ShortName": "",
            "Order": i,
            "CriteriaLevel2Id": CriteriaLevel2Id,
            "Category": "Weight"
        });
    }
    var CriteriaLevel3Id = db.CriteriaLevel3.findOne({ "Name": item, "Category": "Weight" })._id;
    var oldTemplateCriteriaName = item.split(' ').join('');
    if (!db.OldTemplateCriteria.findOne({ "Name": item, "CriteriaLevel2Id": CriteriaLevel2Id })) {
        db.OldTemplateCriteria.insert({
            "_id": NUUID(uuid()),
            "Name": item,
            "CriteriaEntity": "ScreeningData",
            "CriteriaEntityField": oldTemplateCriteriaName,
            "Score": null,
            "TemplateIndicatorNumber": null,
            "CriteriaLevel2Id": CriteriaLevel2Id,
            "CriteriaType": 10,
            "FilterId": null,
            "CompaniesIdsResult": null,
            "Order": i
        });
    }
    if (!db.TemplateCriteria.findOne({ "Name": item, "CriteriaLevel2Id": CriteriaLevel2Id })) {
        db.TemplateCriteria.insert({
            "_id": NUUID(uuid()),
            "Name": item,
            "CriteriaEntity": "ScreeningData",
            "CriteriaEntityField": oldTemplateCriteriaName,
            "CriteriaType": 10,
            "CriteriaLevel2Id": CriteriaLevel2Id,
            "CriteriaLevel3Id": CriteriaLevel3Id,
            "IsScreenable": false
        });
    }
});